<?php
/**
 * Created by PhpStorm.
 * User: Sky
 * Date: 2017/7/27
 * Time: 上午11:35
 */

namespace app\librarys;

use app\librarys\aliyun_oss\Config;
use app\librarys\aliyun_oss\Core\OssException;
use app\librarys\aliyun_oss\OssClient;
use CURLFile;

/**
 * 上传文件
 * Class FileService
 * @package app\librarys
 */
class FileService
{
    /**
     * 上传图片到云存储空间
     * @param string $sourceFilePath 本地上传文件路径
     * @param string $destFileName 上传到云上后的文件名
     * @param null|string $destFloderName 上传到云存储空间的文件夹名称
     * @return null|string
     */
    public static function uploadImage($sourceFilePath, $destFileName, $destFloderName = null)
    {
        return self::_uploadImageAliyun($sourceFilePath, $destFileName, $destFloderName);
    }

    /**
     * 上传图片到阿里云OSS
     * @param $sourceFilePath
     * @param $destFileName
     * @param null $destFloderName
     * @return null|string
     */
    private static function _uploadImageAliyun($sourceFilePath, $destFileName, $destFloderName = null)
    {
        $imageUrl = null;
        try {
            $ossClient = new OssClient(Config::AccessKeyId(), Config::AccessKeySecret(), 'http://' . Config::OssEndpoint());

            $destFloderPath = Config::Folder() . '/';
            if ($destFloderName != null) {
                $destFloderPath = $destFloderPath . $destFloderName . '/';
            }

            $ossClient->uploadFile(Config::BucketName(), $destFloderPath . $destFileName, $sourceFilePath);
            $imageUrl = 'http://' . Config::BucketName() . '.' . Config::ImageEndpoint() . '/' . $destFloderPath . $destFileName;
        } catch (OssException $e) {
            $imageUrl = null;
        }

        return $imageUrl;
    }

    /**
     * 上传文件到云存储空间
     * @param string $sourceFilePath 本地上传文件路径
     * @param string $destFileName 上传到云上后的文件名
     * @param null|string $destFloderName 上传到云存储空间的文件夹名称
     * @return null|string
     */
    public static function uploadFile($sourceFilePath, $destFileName, $destFloderName = null)
    {
        return self::_uploadFileAliyun($sourceFilePath, $destFileName, $destFloderName);
    }

    /**
     * 上传文件到阿里云OSS
     * @param $sourceFilePath
     * @param $destFileName
     * @param null $destFloderName
     * @return null|string
     */
    private static function _uploadFileAliyun($sourceFilePath, $destFileName, $destFloderName = null)
    {
        $fileUrl = null;
        try {
            $ossClient = new OssClient(Config::AccessKeyId(), Config::AccessKeySecret(), 'http://' . Config::OssEndpoint());

            $destFloderPath = Config::Folder() . '/';
            if ($destFloderName != null) {
                $destFloderPath = $destFloderPath . $destFloderName . '/';
            }

            $ossClient->uploadFile(Config::BucketName(), $destFloderPath . $destFileName, $sourceFilePath);
            $fileUrl = 'http://' . Config::BucketName() . '.' . Config::OssEndpoint() . '/' . $destFloderPath . $destFileName;
        } catch (OssException $e) {
            $fileUrl = null;
        }

        return $fileUrl;
    }
}